This invention relates to a multi-system, data sharing complex and particularly concerns the maintenance of consistency between a cached version of a block of data and a version of the block of data which is being written to secondary storage after being updated.
In a database system wherein a plurality of independently-operating computer systems share data, global locking is required to maintain coherency of data in the different systems. A. J. van de Goor, in COMPUTER ARCHITECTURE AND DESIGN, Addison Wesley, 1989, discusses the data coherency problem as one in which sharing data among a proliferation of processors raises the possibility that multiple, inconsistent copies of data may exist because of multiple paths to the data and because of opportunities to locally modify the data.
Solutions to the data coherency problem have been proposed. All are based essentially on the existence of a global lock on data retrieved from a central location. Assuming pagination of data, one computer system of a multi-computer system which shares data stored on a disk acquires a global lock on a page of data and obtains and updates the page. The lock signifies to the other computer systems that the page has been acquired for updating. Prior to releasing the lock on the page, the computer system holding the lock writes the page to the disk, after which it generates and sends a message to the other computer systems to invalidate any copies of the page which may be held in their local cache. The lock on the page is not released until acknowledgement is received from every other computer system having access to the page. A solution similar to this is described in detail in U.S. Pat. No. 4,399,504, which is assigned to the assignee of this patent application, and which is incorporated herein by reference. A commercial product available from the assignee of this application and which incorporates this solution is the IMS/VS system with the data sharing feature.
The prior art global locking system provides great advantage in maintaining data coherency. However, the overhead penalties inherent in it include the requirement for performing an I/O procedure when a page is updated and undertaking message exchange after the I/O procedure in order to notify the other systems and release the lock.
When used in a non-data-shared single system case, the prior art IBM IMS/VS product still incurs extra overhead in maintaining data coherency (consistency) between transactions by implementing a commit policy requiring each transaction which updates data to write the modified data, together with log records, to storage before the transaction is fully committed. This requires one I/O procedure per page for each modifying transaction, which increases overhead costs.
In contrast, the IBM DB2 in the single system, non-data-sharing case follows a policy which does not require an I/O process to write an updated page back to storage in order to commit a transaction. If the protocol described above is used in the IBM DB2 product in a data-sharing situation where a plurality of computer systems access one or more data storage sites, the performance could degrade significantly because of the required write back to storage and message delay. In this regard, see C. J. Date's discussion of concurrency at pages 593-595 in Vol. I of AN INTRODUCTION TO DATABASE SYSTEMS, Addison-Wessley, 1986.
In a multi-computer, data-sharing system which includes multiple levels of storage, it is contemplated that a secondary level of storage would consist of one or more direct access storage devices (DASD's) which are shared by independently-operating computer systems. Typical nomenclature for hierarchally-arranged storage systems classify DASD and other such storage facilities as "secondary" storage. In this regard, secondary storage includes all facilities from which data must be moved to "primary" storage before it can be directly referenced by a CPU. See Detiel, OPERATING SYSTEMS, Second Edition, 1990, by Addison Wesley. It is further contemplated that caching techniques would be useful to provide a high-speed, frequently-accessed storage for shared data. For various reasons, data would be entered into a shared cache by the database systems after acquisition from DASD's. In this regard, a shared cache would be included in a primary level of storage for a multi-computer, data-sharing system.
In such a structure, a potential hazard would exist if one computer system obtained a block of data from the shared cache for the purpose of writing it to the DASD at the same time that the same block of data is obtained from the shared cache by another computer system, modified, and returned to the shared cache. In this situation, it is assumed that the retrieval of the modified block of data from the shared cache for storage in the DASD is referred to as "casting out" of the block. Relatedly, castout requires that the page being cast out be read from the shared memory, written to DASD, and then marked as unchanged in the shared memory.
For efficient cache management of the shared cache, it is required that shared blocks of data be cast out periodically or based on thresholds of changed blocks in the cache. Once a block is cast out, it is marked as unchanged and becomes a candidate for deletion from the cache. A significant danger arises when the casting out is conducted by one computer system as some second computer system writes a new version of the page to the shared memory during the interval between the read and delete operations. The danger is that the delete will erase the new version of the block. Higher level locking or serialization and queuing in the shared cache are typically used to ensure that this does not happen. The problem with higher level locking is that it doubles the cost for removing the page from the cache because it requires two more multi-system interactions, that is lock and unlock. It will also delay the writing of the modified version by the second system which would produce undesirable performance consequences.